#ifndef OCK_MEMORY_BRIDGE_OCK_HMM_LOG_HANDLER_H
#define OCK_MEMORY_BRIDGE_OCK_HMM_LOG_HANDLER_H

#include <cstdint>
#include <memory>

namespace ock {
class OckHmmLogHandler
{
public:
    virtual ~OckHmmLogHandler() noexcept = default;
    virtual void Write(int32_t level, const char *levelStr, const char *fileName, uint64_t lineNo, const char *msg) = 0;
    virtual void Flush(void) = 0;
};

constexpr int32_t OCK_LOG_LEVEL_DEBUG = 0;
constexpr int32_t OCK_LOG_LEVEL_INFO = 1;
constexpr int32_t OCK_LOG_LEVEL_WARN = 2;
constexpr int32_t OCK_LOG_LEVEL_ERROR = 3;
constexpr int32_t OCK_LOG_LEVEL_FATAL = 4;

void OckHmmSetLogHandler(std::shared_ptr<OckHmmLogHandler> handler);
void OckHmmSetLogLevel(int32_t level);
}
#endif